import request from "@/utils/request";

const STRATEGY_BASE_URL = "/ig/theme";

const indicatorThemeAPI = {
  Insert(data?: ThemeInsertParameter) {
    return request<any, ThemeInsertResponse>({
      url: `${STRATEGY_BASE_URL}/insert`,
      method: "post",
      data: data,
    });
  },
  CreateTable(data?: CreateTableParameter) {
    return request({
      url: `${STRATEGY_BASE_URL}/create/table`,
      method: "post",
      data: data,
    });
  },
  TimePeriodList(data?: IndicatorIds) {
    return request<any, IndciatorTimePeriodListResponse[]>({
      url: `${STRATEGY_BASE_URL}/time/periods/list`,
      method: "post",
      data: data,
    });
  },
  DimensionList(data?: IndicatorIds) {
    return request<any, IndicatorDimensionListResponse>({
      url: `${STRATEGY_BASE_URL}/dimension/list`,
      method: "post",
      data: data,
    });
  },
  IndicatorInfoList(data?: IndicatorIds) {
    return request<any, IndicatorInfoListResponse[]>({
      url: `${STRATEGY_BASE_URL}/indicator/info/list`,
      method: "post",
      data: data,
    });
  },
  ThemeInfo(queryParams?: IdParameter) {
    return request<any, ThemeTableInfo>({
      url: `${STRATEGY_BASE_URL}/name/by/id`,
      method: "get",
      params: queryParams,
    });
  },
  ValueById(data?: IdParameter) {
    return request<any, DimensionValueList[]>({
      url: `${STRATEGY_BASE_URL}/value/by/id`,
      method: "post",
      data: data,
    });
  },
};

export default indicatorThemeAPI;

export interface ThemeInsertParameter {
  tableName?: string;
  tableDescription?: string;
  tableMysqlName?: string;
  outlierMonitoring?: number;
  createUserId?: number;
  createUser?: string;
  indicatorIds?: number[];
  dimensionIds?: number[];
  indicatorDimensions?: IndicatorDimensionList[];
  dimensionValues?: IndicatorPrivateDimensionValue[];
  timePeriodId?: number;
  domainId?: number;
  crateTime?: string;
}

export interface IndicatorDimensionList {
  indicatorId?: number;
  dimensionIds?: number[];
}

export interface IndicatorPrivateDimensionValue {
  indicatorId?: number;
  dimensionId?: number;
  dimensionValue?: string;
}

export interface ThemeInsertResponse {
  themeTableId?: number;
}

export interface CreateTableParameter {
  themeTableId?: number;
  columns?: ColumnsConfig[];
}

export interface ColumnsConfig {
  tableName?: string;
  indicatorId?: number;
  indicatorName?: string;
  columnName?: string;
  alias?: string;
  description?: string;
  dataType?: string;
  size?: number;
  digit?: number;
}

export interface TopicOptions {
  id?: number;
  tableName?: string;
}

export interface TimeColumnOptions {
  id?: number;
  timeColumn?: string;
}

export interface IndicatorIds {
  indicatorIds?: number[];
}

export interface IndciatorTimePeriodListResponse {
  id?: number;
  timeColumn?: string;
}

export interface IndicatorDimensionListResponse {
  publicDimensionList?: IndciatorDimension[];
  privateDimensionList?: IndciatorDimension[];
}

export interface IndciatorDimension {
  id?: number;
  indicatorId?: number;
  dimensionColumn?: string;
}

export interface IdParameter {
  id?: number;
}

export interface IndicatorInfoListResponse {
  /**
   * ID
   * 指标的唯一标识符
   */
  id?: number;

  /**
   * 指标名称
   * 用于描述该指标的名称
   */
  indicatorName?: string;

  /**
   * 指标别名
   * 指标的别名或简称
   */
  alias?: string;

  /**
   * 指标字段
   * 指标所属源表的字段
   * */
  columnName?: string;

  /**
   * 源表名称
   * 指标所属的源表名称
   * */
  tableName?: string;

  /**
   * 指标描述
   * 用于详细描述该指标的用途及计算方式
   */
  description?: string;

  /**
   * 数据源名称
   */
  datasourceId?: number;

  /**
   *
   * 数据源名称
   */
  dataSourceName?: string;

  /**
   * 标签
   * 用于标识该指标的标签（例如：销售、财务等）
   */
  tag?: string;

  /**
   * 所属部门
   * 用于标识该指标所属的部门
   */
  department?: string;

  /**
   * 主题ID
   * 用于与 `subject` 表进行关联，标识该指标所属的主题
   */
  subjectId?: number;

  /**
   * 指标域ID
   */
  domainId?: number;

  /**
   * 聚合方法
   * 用于描述该指标如何进行聚合（例如：求和、平均值等）
   */
  aggregationMethod?: string;

  /**
   * 数据类型
   * 用于描述该指标的数据类型（例如：整型、浮点型等）
   */
  dataType?: string;

  /**
   * 长度
   * 用于描述该指标数据的长度
   */
  size?: number;

  /**
   * 精度
   * 用于描述该指标数据的小数位数精度
   */
  digit?: number;

  /**
   * 指标对应的指标表
   * 用于确定指标对应的table
   */
  tableId?: number;

  /**
   * 创建者id
   */
  creatorId?: number;

  /**
   * 创建者
   * 用于记录该指标的创建者
   */
  creator?: string;

  /**
   * 创建时间
   * 记录该条数据的创建时间
   */
  createTime?: string;

  /**
   * 更新时间
   * 记录该条数据的最后更新时间
   */
  updateTime?: string;
}

export interface ThemeTableInfo {
  /**
   * 自增主键
   */
  id?: number;

  /**
   * 表名称
   */
  tableName?: string;

  /**
   * 表描述
   */
  tableDescription?: string;

  /**
   * 数据库表名称
   */
  tableMysqlName?: string;

  /**
   * 是否进行异常值监控 0-不监视 1-监视
   */
  outlierMonitoring?: number;

  /**
   * 指标id List<Integer>
   */
  indicatorId?: string;

  /**
   * 指标公有维度 List<Integer>
   */
  publicDimension?: string;

  /**
   * 指标私有维度 List<ThemePrivateDimensionDTO>
   */
  privateDimension?: string;

  /**
   * 指标数据期列
   */
  timePeriod?: number;

  /**
   * 所属分组id
   */
  domainId?: number;

  /**
   * 创建人id
   */
  createUserId?: number;

  /**
   * 创建人
   */
  createUser?: string;

  /**
   * 更新时间
   */
  updateTime?: string;

  /**
   * 创建时间
   */
  createTime?: string;
}

export interface DimensionValueList {
  /**
   * 维度值
   */
  value?: string;

  /**
   * 维度名称
   */
  label?: string;
}

export interface IndicatorOperationalResponse {
  fileNames?: string[];
  entityList?: any[];
}
